// 题目描述
// 59. 螺旋矩阵 II
// 中等
// 1.2K
// 给你一个正整数 n ，生成一个包含 1 到 n2 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
//   示例 1：
// 输入：n = 3
// 输出：[[1,2,3],[8,9,4],[7,6,5]]
// 示例 2：
// 输入：n = 1
// 输出：[[1]]
//   提示：
// 1 <= n <= 20
// 通过次数
// 350.1K
// 提交次数
// 485.1K
// 通过率
// 72.2%
// https://leetcode.cn/problems/spiral-matrix-ii

/**
 * @param {number} n
 * @return {number[][]}
 */
var generateMatrix = function (n) {
  // 准备好矩阵
  const matrix = new Array(n).fill(0).map(() => new Array(n).fill(0))

  // 准备要填写的数字
  let numFill = 1

  // 定义外圈的边界
  let [left, right, top, bottom] = [0, n - 1, 0, n - 1]
  while (left <= right && top <= bottom) {
    // 1. 填写最上面一行
    for (let col = left; col <= right; ++col) {
      matrix[top][col] = numFill++
    }
    // 2. 填写最右面一列
    for (let row = top + 1; row <= bottom; ++row) {
      matrix[row][right] = numFill++
    }
    if (left < right && top < bottom) {
      // 3. 填写最下面一行
      for (let col = right - 1; col > left; --col) {
        matrix[bottom][col] = numFill++
      }
      // 4. 填写最左面一列
      for (let row = bottom; row > top; --row) {
        matrix[row][left] = numFill++
      }
    }

    // 收缩外圈的边界
    [left, right, top, bottom] = [left + 1, right - 1, top + 1, bottom - 1]
  }

  return matrix
}

console.log(
  generateMatrix(3)
)
